//备注：拷贝代码请加上作者信息
//作者：王海涛
//邮箱：1126471088@qq.com
//版本：V0.2.3
/********************************************************
    说明：
    1、Debug使用串口1，波特率使用256000bps。
    2、发送使用环形缓冲区模式，缓存大小=DEBUG_Max_Buff_Count。
    3、接收使用环形队列模式，缓存大小=DEBUG_Max_Buff_Count*3。
    4、基于FreeRTOS系统，注册初始化后会自动创建一个任务。
    5、外部可使用printf等标准输入输出函数。
    6、获取串口数据加入超时等待时间。
**********************************************************/
#ifndef __DEBUG_DRIVER_H__
#define __DEBUG_DRIVER_H__

#include "../../BSP/UART_BSP/uart_bsp.h"


//针对不同的编译器调用不同的stdint.h文件
#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)
    #include <stdint.h>
    #include <stdbool.h>
#endif


#define DEBUG_Serial_Name       UART_1
#define DEBUG_Serial_Baud_Rate  921600
#define DEBUG_Max_Buffer_Size   512
#define DEBUG_Max_Queue_Count   4



#define PRINT_DEBUG_ENABLE		0	/* 打印调试信息 */
#define PRINT_ERR_ENABLE	    1 	/* 打印错误信息 */
#define PRINT_INFO_ENABLE		1	/* 打印个人信息 */

/* 打印调试信息 */
#if PRINT_DEBUG_ENABLE
#define PRINT_DEBUG(fmt, args...) 	 do{(printf("[DEBUG] >> "), printf(fmt, ##args));}while(0)     
#else
#define PRINT_DEBUG(fmt, args...)
#endif
/* 打印错误信息 */
#if PRINT_ERR_ENABLE
#define PRINT_ERR(fmt, args...) 	 do{(printf("[ERR] >> "), printf(fmt, ##args));}while(0)     
#else
#define PRINT_ERR(fmt, args...)
#endif
/* 打印个人信息 */
#if PRINT_INFO_ENABLE
#define PRINT_INFO(fmt, args...) 	 do{(printf("[INFO] >> "), printf(fmt, ##args));}while(0)     
#else
#define PRINT_INFO(fmt, args...)
#endif
	
/* 断言 Assert */
#define AssertCalled(char,int) 	printf("\nError:%s,%d\r\n",char,int)
#define ASSERT(x)   if((x)==0)  AssertCalled(__FILE__,__LINE__)
  
typedef enum 
{
	ASSERT_ERR = 0,					/* 错误 */
	ASSERT_SUCCESS = !ASSERT_ERR	/* 正确 */
}Assert_ErrorStatus;


/*Debug回调函数结构体*/
typedef struct
{
    void (*WHT_Init)(void);//注册初始化
    void (*WHT_Printf)(const char* tx_buffer, uint16_t seng_length);//缓存数据的发送
    uint16_t (*WHT_Scanf)(uint8_t* rx_buffer, uint16_t max_receive_length, uint32_t timeout);//预计读取max_receive_length个数据，返回实际读取一帧数据的长度，返回0表示超时
}WHT_Debug_Driver_t;

extern const WHT_Debug_Driver_t WHT_Debug_Driver;

#endif /*__DEBUG_DRIVER_H__*/
